﻿using System.Windows;
using Microsoft.Practices.Composite.Modularity;

namespace Core
{
    /// <summary>
    /// Extracts methods of UnityBootstrapper class
    /// </summary>
    public interface IBootstrapper
    {
        /// <summary>
        /// Main view reference
        /// </summary>
        ShellView ShellView { get; set; }

        Microsoft.Practices.Unity.IUnityContainer UnityContainer { get; }
        
        /// <summary>
        /// Sets the screen manager up
        /// </summary>
        void RegisterScreenManeger();

        /// <summary>
        /// Registers registers services in IoC container
        /// </summary>
        void RegisterServices();

        /// <summary>
        /// Returns modules catalog loaded from xaml
        /// </summary>
        /// <returns></returns>
        IModuleCatalog CreateModuleCatalog();

        /// <summary>
        /// Initializes application resources, registers services in IoC container
        /// </summary>
        void Initialize();

        /// <summary>
        /// creates shell using IoC container and sets app root visual
        /// </summary>
        /// <returns>
        /// DependencyObject - ShellView
        /// </returns>
        DependencyObject CreateAndSetRootVisual();

        /// <summary>
        /// Run bootstrapper
        /// </summary>
        void KickOff();
    }
}
